package com.mashuai.utils.toolkit.core.msHandlebean.annotation;

import com.mashuai.utils.toolkit.achieve.MsExegesis;
import org.springframework.stereotype.Component;

import java.lang.annotation.*;

/**
 * 默认值：优先级，
 * <p>
 * 注解带默认值!=指定的默认？注解值:(yml配置的默认值!=指定的默认？yml配置的默认值:指定的默认值)
 * <p>
 * 主要解决A表关联B表、B关联C，C关联D，以往查询A表信息带出B、C、D表数据，是A left join B  XX left join C  XX lfet join D......
 * User.class.getAnnotationsByType(MsJoinTable.class);
 *
 * @author: mashuai
 * @ClassName: MsJoinTable
 */
@MsExegesis("主要解决A表关联B表、B关联C，C关联D，以往查询A表信息带出B、C、D表数据，是A left join B  XX left join C  XX lfet join D......")
@Component
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Repeatable(MsJoinMoreTables.class)
public @interface MsJoinTable {
    @MsExegesis("关联的表名")
    String joinTable();
    @MsExegesis("关联表的字段，默认关联表字段是id。可在yml文件配置：ms.hb.tb-join-field:id")
    String joinField() default "id";
    @MsExegesis("多个left join关联时候，只有@MsJoinMoreTables注解中使用生效")
    String moreJoinCondition() default "";
    @MsExegesis("需要取值的字段 格式：[数据库字段]@[赋值给对应实体类的字段]。如果填写{'name@roomName','room_id'}这种格式，会默认把字段转换成驼峰{'name@roomName','room_id@roomId'}进行映射")
    String[] needFields() default {};
    @MsExegesis("过滤条件,@MsJoinMoreTables注解中使用不生效")
    String condition() default "";
}
